]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
search: Remove updateSearch later on destruction
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Sat, 31 Aug 2019 21:40:52 +0000 (23:40 +0200)
committerFlorian Müllner <florian.muellner@gmail.com>
Mon, 9 Sep 2019 19:28:18 +0000 (19:28 +0000)
When the GridSearchBase actor is destroyed we should remove the
ongoing later that might try to access to invalid resources.

To do this, add an _onDestroy() callback function to SearchResultsBase
and override it in GridSearchBase.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/700

js/ui/search.js

index d55021ac91994e0443853a7308b20d5714c642cb..d4de5ece25c9f550628429e685f30ae2655fa981 100644 (file)
@@ -158,10 +158,15 @@ var SearchResultsBase = class {
         this._clipboard = St.Clipboard.get_default();
 
         this._cancellable = new Gio.Cancellable();
+
+        this.actor.connect('destroy', this._onDestroy.bind(this));
     }
 
     destroy() {
         this.actor.destroy();
+    }
+
+    _onDestroy() {
         this._terms = [];
     }
 
@@ -341,14 +346,30 @@ var GridSearchResults = class extends SearchResultsBase {
         this._resultDisplayBin.set_child(this._bin);
     }
 
+    _onDestroy() {
+        if (this._updateSearchLater) {
+            Meta.later_remove(this._updateSearchLater);
+            delete this._updateSearchLater;
+        }
+
+        super._onDestroy();
+    }
+
     updateSearch(...args) {
         if (this._notifyAllocationId)
             this.actor.disconnect(this._notifyAllocationId);
+        if (this._updateSearchLater) {
+            Meta.later_remove(this._updateSearchLater);
+            delete this._updateSearchLater;
+        }
 
         // Make sure the maximum number of results calculated by
         // _getMaxDisplayedResults() is updated after width changes.
         this._notifyAllocationId = this.actor.connect('notify::allocation', () => {
-            Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
+            if (this._updateSearchLater)
+                return;
+            this._updateSearchLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
+                delete this._updateSearchLater;
                 super.updateSearch(...args);
                 return GLib.SOURCE_REMOVE;
             });